今天我們讓 Agent 直接讀取結構化資料,並自動生成分析結論。
import pandas as pd
import os
from langchain.tools import Tool
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain.agents import initialize_agent, AgentType
# -------------------------------
# 1. 生成範例 CSV
# -------------------------------
data = {
"product": ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"],
"sales": [120, 150, 90, 200, 175, 130, 160, 110, 140, 180]
}
df = pd.DataFrame(data)
df.to_csv("sales.csv", index=False)
print("✅ sales.csv 已生成")
# -------------------------------
# 2. 初始化 LLM
# -------------------------------
# 設定 Gemini API Key
os.environ["GOOGLE_API_KEY"] = "你的 Gemini API Key"
llm = ChatGoogleGenerativeAI(model="gemini-2.5-flash", temperature=0)
# -------------------------------
# 3. 建立資料分析工具
# -------------------------------
def analyze_csv(query: str) -> str:
df = pd.read_csv("sales.csv") # 讀取 CSV
avg_sales = df['sales'].mean()
max_sales = df['sales'].max()
min_sales = df['sales'].min()
return (
f"CSV 平均銷售額為 {avg_sales:.2f}\n"
f"最高銷售額為 {max_sales}\n"
f"最低銷售額為 {min_sales}"
)
csv_tool = Tool(
name="CSVAnalyzer",
func=analyze_csv,
description="分析 CSV 資料,回答統計或簡單問題"
)
# -------------------------------
# 4. 初始化 Agent
# -------------------------------
agent = initialize_agent(
tools=[csv_tool],
llm=llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
verbose=True
)
# -------------------------------
# 5. 測試
# -------------------------------
question = "CSV 平均銷售額是多少?"
response = agent.run(question)
print("\n💡 Agent 回答:")
print(response)
Action: CSVAnalyzer
Action Input: 計算 CSV 的平均銷售額
Observation: CSV 平均銷售額為 145.50
最高銷售額為 200
最低銷售額為 90
Thought:Final Answer: CSV 平均銷售額為 145.50
> Finished chain.
💡 Agent 回答:
CSV 平均銷售額為 145.50